package cn.jsj.onclock.pojo.identity;

import cn.jsj.onclock.exception.CustomException;

import java.util.LinkedList;
import java.util.List;

/**
 * 群组内的身份
 * @author 卢斌
 */
public enum GroupIdentityEnum {

    /**
     * 普通成员
     */
    MEMBER,

    /**
     * 群管理员
     */
    MANAGER,

    /**
     * 群主
     */
    MASTER;


    /**
     * 检查用户在群中的职务是否具有加群审批权
     *
     * @param identityEnum  用户身份
     * @return  是否具有加群审批权
     */
    public static boolean hasPowerOfCheckJoinGroupRequest(GroupIdentityEnum identityEnum) {
        if (identityEnum == null) {
            throw new CustomException("身份验证信息为空");
        }
        return GroupIdentityEnum.MASTER.equals(identityEnum) || GroupIdentityEnum.MANAGER.equals(identityEnum);
    }

    /**
     * 获取可以审批用户加群申请的所有群内成员角色
     */
    public static List<GroupIdentityEnum> listIdentityCouldCheckJoinGroupRequest() {
        List<GroupIdentityEnum> storage = new LinkedList<>();
        for (GroupIdentityEnum identity : GroupIdentityEnum.values()) {
            if (GroupIdentityEnum.hasPowerOfCheckJoinGroupRequest(identity)) {
                storage.add(identity);
            }
        }
        return storage;
    }


    /**
     * 检查用户在群组中的身份，是否可以修改群组名称
     */
    public static boolean hasPowerOfUpdateGroupName(GroupIdentityEnum identityEnum) {
        if (identityEnum == null) {
            throw new CustomException("验证身份信息为空");
        }
        return GroupIdentityEnum.MASTER.equals(identityEnum) || GroupIdentityEnum.MANAGER.equals(identityEnum);
    }


    /**
     * 检查用户在群组中的身份，是否可以修改群组默认申请方式
     */
    public static boolean hasPowerOfUpdateAuthWay(GroupIdentityEnum identityEnum) {
        if (identityEnum == null) {
            throw new CustomException("验证身份信息为空");
        }
        return GroupIdentityEnum.MASTER.equals(identityEnum);
    }


    /**
     * 检查用户在群组的身份，是否可以删除群组
     */
    public static boolean hasPowerOfDeleteGroup(GroupIdentityEnum identityEnum) {
        if (identityEnum == null) {
            throw new CustomException("验证身份信息为空");
        }
        return GroupIdentityEnum.MASTER.equals(identityEnum);
    }

    /**
     * 检查用户在群组的身份，是否可以发起签到
     */
    public static Boolean hasPowerOfLaunchSign(GroupIdentityEnum identityEnum) {
        if (identityEnum == null) {
            throw new CustomException("验证身份信息为空");
        }
        return GroupIdentityEnum.MASTER.equals(identityEnum) || GroupIdentityEnum.MANAGER.equals(identityEnum);
    }


}
